package cn.kgc.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

/**
 * @author: mosin
 * @version: v1.0  2022/10/20
 * 通过反射操作类对象中的属性
 *  属性取值 赋值
 */
public class ReflectDemo04 {

    public static void main(String[] args) {

        try {

            Class  clazz = Class.forName("cn.kgc.reflect.User");

            // 获取属性对象的相关方法   当前类以及父类中所有公开的属性  public
            Field[] fields = clazz.getFields();
            System.out.println("-----------------getFields()--------------------");
            for (Field field : fields) {
                System.out.println("field = " + field);
            }

            System.out.println("----------getDeclaredFields()----------------");
            //获取本类中所有已声明的属性
            Field[] declaredFields = clazz.getDeclaredFields();
            for (Field declaredField : declaredFields) {
                System.out.println("declaredField = " + declaredField);
            }

            //获取本类或者父类中指定名字的公开属性  public
            System.out.println("----------getField(String name)---------------");
            //Field field = clazz.getField("name");
            Field field = clazz.getField("personAge");
            System.out.println("field = " + field);

            System.out.println("---------------getDeclaredField(String name)-----------------------");
            //获取本类中指定属性名的已声明的属性 public  private
            field = clazz.getDeclaredField("age");
            System.out.println("field = " + field);

            System.out.println("--------------属性赋值操作--------------------");
            //创建对象
            Object o = clazz.newInstance();
            System.out.println("o = " + o);
            //  操作属性   赋值    参数1:  当前属性时属于哪个对象    参数2:给属性赋的值 value
            // 提升私有属性操作权限  可操作   true
            field.setAccessible(true);
            field.set(o,20);
            System.out.println("o = " + o);
            System.out.println("--------------属性取值操作--------------------");
            Object o1 = field.get(o);
            System.out.println("o1 = " + o1);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }





}
